package com.example.lotterysystem.service.impl;

import com.example.lotterysystem.common.errorcode.ServiceErrorCodeConstants;
import com.example.lotterysystem.common.exception.ServiceException;
import com.example.lotterysystem.service.PictureService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

@Component
public class PictureServiceImpl implements PictureService {

    @Value("${pic.local-path}")
    private String localPath;

    @Override
    public String savePicture(MultipartFile multipartFile) {
        // 创建目录
        File dir = new File(localPath);
        if (!dir.exists()) {
            // 如果目录不存在的话，进行创建
            dir.mkdirs();
            // mkdirs 和 mkdir 的区别
            // 如果目录为 a/b/c/d 创建多级目录的话
            // mkdir 如果a/b/c 不存在的话，就不会创建成功 d 目录
            // mkdirs 就会全部创建成功
        }

        // 创建索引
        // 比如这个图片为 abc.jpg 需要转换成 xxx.jpg
        // 需要先把 尾部取出来 就是 .jpg 之后 创建一个唯一的头部也就是 xxx 之后将它们组合，这样之后就是 xxx.jpg
        String fileName = multipartFile.getOriginalFilename(); // 这样就可以获取传来文件名称
        // 使用 断言 进行判断是否为空
        assert fileName != null;
        // 获取文件名成尾部
        String suffix = fileName.substring(fileName.lastIndexOf("."));
        // 创建新的 文件名称
        fileName = UUID.randomUUID() + suffix;

        // 保存文件
        try {
            multipartFile.transferTo(new File(localPath + "/" + fileName));
        } catch (IOException e) {
            throw new ServiceException(ServiceErrorCodeConstants.PIC_UPLOAD_ERROR);
        }

        return fileName;
    }
}
